<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>线性结构-单向连表封装</title>
</head>

<body>
  <script>
    // 封装链表类
    function LinkedList() {
      // 内部的类: 节点类
      function Node(data) {
        this.data = data
        this.next = null
      }
      // 属性
      this.head = null
      this.length = 0
      // 一.追加方法
      LinkedList.prototype.append = function (data) {
        // 1.创建新的节点
        const newNode = new Node(data)
        // 2.判断是否添加的是第一个节点
        if (this.length == 0) { // 2.1是第一个节点
          this.head = newNode
        } else {                // 2.2不是第一个节点
          // 找到最后一个节点
          let current = this.head
          while (current.next) {
            current = current.next
          }
          // 最后节点的next指向新的节点
          current.next = newNode
        }

        // 3.length+1
        this.length += 1
      }
      // 二.toString方法
      LinkedList.prototype.toString = function () {
        // 1.定义变量
        let current = this.head
        let listString = ''
        // 2.循环获取一个个节点
        while (current) {
          listString += current.data + " "
          current = current.next
        }
        return listString
      }
    }
    const list = new LinkedList()
    list.append('a')
    list.append('b')
    list.append('c')
    list.append('c')
    list.append('c')
    list.append('c')
    alert(list);
  </script>
</body>

</html>